home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / blitter_c2p.i < prev    next >
Text File  |  1997-01-31  |  16KB  |  908 lines

  1.     Section __Chunky2Planar,code
  2.  
  3. ;-------------------chunky 2 planar-------------------
  4.  
  5.     cnop    0,16
  6.  
  7. c2p_1_Pass:    
  8.  
  9. .Swait:    tst.w    SetScreen    ;Make sure the last frame was displayed,
  10.     bne.b    .Swait        ;no need to go faster than 50 fps.
  11.  
  12. .Bwait:    tst.w    BlitterIsDone    ;Make sure the blitter is done with the
  13.     bne.b    .Bwait        ;previous frame.
  14.  
  15.     move.l    Screen_0,d0
  16.     move.l    Screen_1,Screen_0
  17.     move.l    Screen_2,Screen_1
  18.     move.l    Screen_3,Screen_2
  19.     move.l    d0,Screen_3
  20.  
  21.     move.w    #-1,SetScreen
  22.  
  23. ;----------------CPU AntiScrambler----------------
  24.  
  25.     RastPos    s_c2p_time
  26.  
  27.     lea.l    ChunkyBuffer,a0
  28.     move.l    Buffer_0,a1
  29.  
  30.     move.l    #$ff00ff00,d4
  31.     move.l    d4,d5
  32.     not.l    d5
  33.  
  34.     move.w    #ChunkyPixels/8-2,d7
  35.  
  36.     IFD    ClearChunkyBuffer
  37.  
  38.     move.l    (a0),d0        ;Buffered chunky write
  39.     clr.l    (a0)+
  40.     move.l    (a0),d2        ;Buffered chunky write
  41.     clr.l    (a0)+
  42.  
  43.     ELSE
  44.  
  45.     move.l    (a0)+,d0    ;Buffered chunky write
  46.     move.l    (a0)+,d2    ;Buffered chunky write
  47.  
  48.     ENDIF
  49. .Loop:
  50.     move.l    d0,d1        ;2 cycles
  51.     move.l    d2,d3        ;2 cycles
  52.  
  53.     and.l    d4,d0        ;2 cycles
  54.     and.l    d4,d2        ;2 cycles
  55.     lsr.l    #8,d2        ;2 cycles
  56.     or.l    d2,d0        ;2 cycles
  57.  
  58.     move.l    d0,(a1)+    ;ChipRam Write
  59.  
  60.     and.l    d5,d1        ;2 cycles
  61.     and.l    d5,d3        ;2 cycles
  62.     lsl.l    #8,d1        ;2 cycles
  63.     or.l    d3,d1        ;2 cycles
  64.  
  65.     IFD    ClearChunkyBuffer
  66.  
  67.     move.l    (a0),a2        ;
  68.     clr.l    (a0)+
  69.     move.l    (a0),a3        ;
  70.     clr.l    (a0)+
  71.  
  72.     ELSE
  73.  
  74.     move.l    (a0)+,a2    ;
  75.     move.l    (a0)+,a3    ;
  76.  
  77.     ENDIF
  78.  
  79.     move.l    d1,(a1)+    ;ChipRam Write
  80.  
  81.     move.l    a2,d0        ;2 cycles
  82.     move.l    a3,d2        ;2 cycles
  83.  
  84.     dbra    d7,.Loop
  85. ;-------
  86.  
  87.     move.l    d0,d1        ;2 cycles
  88.     move.l    d2,d3        ;2 cycles
  89.  
  90.     and.l    d4,d0        ;2 cycles
  91.     and.l    d4,d2        ;2 cycles
  92.     lsr.l    #8,d2        ;2 cycles
  93.     or.l    d2,d0        ;2 cycles
  94.  
  95.     move.l    d0,(a1)+    ;ChipRam Write
  96.  
  97.     and.l    d5,d1        ;2 cycles
  98.     and.l    d5,d3        ;2 cycles
  99.     lsl.l    #8,d1        ;2 cycles
  100.     or.l    d3,d1        ;2 cycles
  101.  
  102.     move.l    d1,(a1)+    ;ChipRam Write
  103.  
  104.     RastPos    e_c2p_time
  105.  
  106. ;-----------------Start Blitter--------------------
  107.  
  108.     move.l    #BlitterPass,BlittInter
  109.  
  110.     lea.l    $dff000,a0
  111.     move.l    #$FFFFFFFF,bltafwm(a0)
  112.  
  113.     move.l    Buffer_0,d0
  114.     move.l    d0,bltbpt(a0)
  115.     addq.l    #2,d0
  116.     move.l    d0,bltapt(a0)
  117.  
  118.     move.l    Buffer_1,bltdpt(a0)
  119.  
  120.     move.w    #$4DE4,bltcon0(a0)    ;AC+Bc
  121.     move.w    #$0000,bltcon1(a0)
  122.     move.w    #$0F0F,bltcdat(a0)
  123.     move.w    #$0002,bltamod(a0)
  124.     move.w    #$0002,bltbmod(a0)
  125.     move.w    #$0000,bltdmod(a0)
  126.     move.w    #ChunkyPixels/4,bltsizv(a0)
  127.     move.w    #$0001,bltsizh(a0)
  128.  
  129.     move.w    #-1,BlitterIsDone
  130.  
  131.     ClrINTQ    INTF_BLIT
  132.     SetINT    INTF_INTEN!INTF_BLIT
  133.  
  134.     addq.l    #1,TellFrames
  135.     rts
  136.  
  137.  
  138.  
  139. ;-------------------BLITTER DEL, 2 passes ----------------
  140. BlitterPass:
  141.  
  142.     lea.l    $dff000,a0
  143.  
  144.     move.l    Buffer_1,d0
  145.     move.l    d0,bltbpt(a0)
  146.     addq.l    #2,d0
  147.     move.l    d0,bltapt(a0)
  148.  
  149.     move.l    Screen_0,d0
  150.     add.l    #BitplaneSize*3,d0
  151.     move.l    d0,bltdpt(a0)
  152.  
  153.     move.w    #$2DE4,bltcon0(a0)
  154.     move.w    #$0000,bltcon1(a0)
  155.     move.w    #$3333,bltcdat(a0)
  156.     move.w    #$0002,bltamod(a0)
  157.     move.w    #$0002,bltbmod(a0)
  158.     move.w    #$0000,bltdmod(a0)
  159.     move.w    #BitplaneSize/2,bltsizv(a0)
  160.     move.w    #$0001,bltsizh(a0)
  161.  
  162.     move.l    #.p1,BlittInter
  163.     movem.l    (sp)+,d0/a0
  164.     ClrINTQ    INTF_BLIT
  165.     rte
  166.  
  167. .p1:
  168.     lea.l    $dff000,a0
  169.  
  170.     move.l    Buffer_1,d0
  171.     add.l    #-2+ChunkyPixels/2,d0
  172.     move.l    d0,bltbpt(a0)
  173.  
  174.     move.l    Buffer_1,d0
  175.     add.l    #-4+ChunkyPixels/2,d0
  176.     move.l    d0,bltapt(a0)
  177.  
  178.     move.l    Screen_0,d0
  179.     add.l    #-2+ChunkyPixels/4+BitplaneSize*2,d0
  180.     move.l    d0,bltdpt(a0)
  181.  
  182.     move.w    #$2DE4,bltcon0(a0)
  183.     move.w    #$0002,bltcon1(a0)
  184.     move.w    #$CCCC,bltcdat(a0)
  185.     move.w    #$0002,bltamod(a0)
  186.     move.w    #$0002,bltbmod(a0)
  187.     move.w    #$0000,bltdmod(a0)
  188.     move.w    #BitplaneSize/2,bltsizv(a0)
  189.     move.w    #$0001,bltsizh(a0)
  190.  
  191.     move.l    #.p2,BlittInter
  192.     movem.l    (sp)+,d0/a0
  193.     ClrINTQ    INTF_BLIT
  194.     rte
  195.  
  196. .p2:
  197.     lea.l    $dff000,a0
  198.  
  199.     move.l    Buffer_0,d0
  200.     add.l    #-2+ChunkyPixels,d0
  201.     move.l    d0,bltbpt(a0)
  202.     
  203.     move.l    Buffer_0,d0
  204.     add.l    #-4+ChunkyPixels,d0
  205.     move.l    d0,bltapt(a0)
  206.  
  207.     move.l    Buffer_1,d0
  208.     add.l    #-2+ChunkyPixels/2,d0
  209.     move.l    d0,bltdpt(a0)
  210.  
  211.     move.w    #$4DE4,bltcon0(a0)
  212.     move.w    #$0002,bltcon1(a0)
  213.     move.w    #$F0F0,bltcdat(a0)
  214.     move.w    #$0002,bltamod(a0)
  215.     move.w    #$0002,bltbmod(a0)
  216.     move.w    #$0000,bltdmod(a0)
  217.     move.w    #ChunkyPixels/4,bltsizv(a0)
  218.     move.w    #$0001,bltsizh(a0)
  219.  
  220.     move.l    #.p3,BlittInter
  221.     movem.l    (sp)+,d0/a0
  222.     ClrINTQ    INTF_BLIT
  223.     rte
  224.  
  225. .p3:
  226.     lea.l    $dff000,a0
  227.  
  228.     move.l    Buffer_1,d0
  229.     move.l    d0,bltbpt(a0)
  230.     addq.l    #2,d0
  231.     move.l    d0,bltapt(a0)
  232.  
  233.     move.l    Screen_0,d0
  234.     add.l    #BitplaneSize*1,d0
  235.     move.l    d0,bltdpt(a0)
  236.  
  237.     move.w    #$2DE4,bltcon0(a0)
  238.     move.w    #$0000,bltcon1(a0)
  239.     move.w    #$3333,bltcdat(a0)
  240.     move.w    #$0002,bltamod(a0)
  241.     move.w    #$0002,bltbmod(a0)
  242.     move.w    #$0000,bltdmod(a0)
  243.     move.w    #BitplaneSize/2,bltsizv(a0)
  244.     move.w    #$0001,bltsizh(a0)
  245.  
  246.     move.l    #.p4,BlittInter
  247.     movem.l    (sp)+,d0/a0
  248.     ClrINTQ    INTF_BLIT
  249.     rte
  250.  
  251. .p4:
  252.     lea.l    $dff000,a0
  253.  
  254.     move.l    Buffer_1,d0
  255.     add.l    #-2+ChunkyPixels/2,d0
  256.     move.l    d0,bltbpt(a0)
  257.  
  258.     move.l    Buffer_1,d0
  259.     add.l    #-4+ChunkyPixels/2,d0
  260.     move.l    d0,bltapt(a0)
  261.  
  262.     move.l    Screen_0,d0
  263.     add.l    #-2+ChunkyPixels/4,d0
  264.     move.l    d0,bltdpt(a0)
  265.  
  266.     move.w    #$2DE4,bltcon0(a0)
  267.     move.w    #$0002,bltcon1(a0)
  268.     move.w    #$CCCC,bltcdat(a0)
  269.     move.w    #$0002,bltamod(a0)
  270.     move.w    #$0002,bltbmod(a0)
  271.     move.w    #$0000,bltdmod(a0)
  272.     move.w    #BitplaneSize/2,bltsizv(a0)
  273.     move.w    #$0001,bltsizh(a0)
  274.  
  275.     move.l    #.done,BlittInter
  276.     movem.l    (sp)+,d0/a0
  277.     ClrINTQ    INTF_BLIT
  278.     rte
  279. .done:
  280.  
  281.     movem.l    (sp)+,d0/a0
  282.  
  283.     ClrINTQ    INTF_BLIT
  284.     ClrINT    INTF_BLIT
  285.  
  286.     clr.w    BlitterIsDone
  287.     rte
  288.  
  289. ;-------------------chunky 2 planar-------------------
  290.  
  291. c2p_2_Pass:
  292.  
  293. .Swait:    tst.w    SetScreen    ;Make sure the last frame was displayed,
  294.     bne.b    .Swait        ;no need to go faster than 50 fps.
  295.  
  296. .Bwait:    tst.w    BlitterIsDone    ;Make sure the blitter is done with the
  297.     bne.b    .Bwait        ;previous frame.
  298.  
  299.     move.l    Screen_0,d0
  300.     move.l    Screen_1,Screen_0
  301.     move.l    Screen_2,Screen_1
  302.     move.l    Screen_3,Screen_2
  303.     move.l    d0,Screen_3
  304.  
  305.     move.w    #-1,SetScreen
  306.  
  307. ;----------------CPU AntiScrambler & 1 extra cpu pass ----------------
  308.  
  309.     RastPos    s_c2p_time
  310.  
  311.     lea.l    ChunkyBuffer,a0
  312.     move.l    Buffer_1,a1
  313.  
  314.     move.l    #$f0f0f0f0,d6
  315.     move.l    d6,d7
  316.     not.l    d7
  317.  
  318.     move.w    #ChunkyPixels/8-2,d5
  319.  
  320.     IFD    ClearChunkyBuffer
  321.  
  322.     move.l    (a0),d0        ;Buffered chunky write
  323.     clr.l    (a0)+
  324.     move.l    (a0),d2        ;Buffered chunky write
  325.     clr.l    (a0)+
  326.  
  327.     ELSE
  328.  
  329.     move.l    (a0)+,d0    ;Buffered chunky write
  330.     move.l    (a0)+,d2    ;Buffered chunky write
  331.  
  332.     ENDIF
  333.  
  334. .loop:
  335.     move.w    d0,d1    ;2 cycles
  336.     swap    d2    ;4 cycles
  337.     move.w    d2,d0    ;2 cycles
  338.     move.w    d1,d2    ;2 cycles
  339.     swap    d2    ;4 cycles
  340.     move.l    d0,d1    ;2 cycles
  341.     move.l    d2,d3    ;2 cycles    sum: 22 cycles
  342.  
  343.     and.l    d6,d0    ;2 cycles
  344.     and.l    d6,d2    ;2 cycles
  345.     lsr.l    #4,d2    ;4 cycles
  346.     or.l    d2,d0    ;2 cycles
  347.     
  348.     ror.l    #8,d0    ;6 cycles
  349.     ror.w    #8,d0    ;6 cycles
  350.     ror.l    #8,d0    ;6 cycles    sum: 28 cycles
  351.  
  352.     move.l    d0,(a1)+
  353.  
  354.     and.l    d7,d1    ;2 cycles
  355.     and.l    d7,d3    ;2 cycles
  356.     lsl.l    #4,d1    ;4 cycles
  357.     or.l    d3,d1    ;2 cycles
  358.  
  359.     ror.l    #8,d1    ;6 cycles
  360.     ror.w    #8,d1    ;6 cycles
  361.     ror.l    #8,d1    ;6 cycles    sum: 28 cycles
  362.  
  363.     IFD    ClearChunkyBuffer
  364.  
  365.     move.l    (a0),a2        ;
  366.     clr.l    (a0)+
  367.     move.l    (a0),a3        ;
  368.     clr.l    (a0)+
  369.  
  370.     ELSE
  371.  
  372.     move.l    (a0)+,a2    ;
  373.     move.l    (a0)+,a3    ;
  374.  
  375.     ENDIF
  376.  
  377.     move.l    d1,(a1)+
  378.  
  379.     move.l    a2,d0    ;2 cycles
  380.     move.l    a3,d2    ;2 cycles
  381.  
  382.     dbra    d5,.loop
  383. ;-------
  384.     move.w    d0,d1    ;2 cycles
  385.     swap    d2    ;4 cycles
  386.     move.w    d2,d0    ;2 cycles
  387.     move.w    d1,d2    ;2 cycles
  388.     swap    d2    ;4 cycles
  389.     move.l    d0,d1    ;2 cycles
  390.     move.l    d2,d3    ;2 cycles    sum: 22 cycles
  391.  
  392.     and.l    d6,d0    ;2 cycles
  393.     and.l    d6,d2    ;2 cycles
  394.     lsr.l    #4,d2    ;4 cycles
  395.     or.l    d2,d0    ;2 cycles
  396.     
  397.     ror.l    #8,d0    ;6 cycles
  398.     ror.w    #8,d0    ;6 cycles
  399.     ror.l    #8,d0    ;6 cycles    sum: 28 cycles
  400.  
  401.     move.l    d0,(a1)+
  402.  
  403.     and.l    d7,d1    ;2 cycles
  404.     and.l    d7,d3    ;2 cycles
  405.     lsl.l    #4,d1    ;4 cycles
  406.     or.l    d3,d1    ;2 cycles
  407.  
  408.     ror.l    #8,d1    ;6 cycles
  409.     ror.w    #8,d1    ;6 cycles
  410.     ror.l    #8,d1    ;6 cycles    sum: 28 cycles
  411.  
  412.     move.l    d1,(a1)+
  413.  
  414.  
  415.     RastPos    e_c2p_time
  416.  
  417. ;-----------------Start Blitter--------------------
  418.  
  419.     move.l    #SmallBlitterPass,BlittInter
  420.  
  421.     lea.l    $dff000,a0
  422.  
  423.     move.l    Buffer_1,d0
  424.     move.l    d0,bltbpt(a0)
  425.     addq.l    #2,d0
  426.     move.l    d0,bltapt(a0)
  427.  
  428.     move.l    Screen_0,d0
  429.     add.l    #BitplaneSize*3,d0
  430.     move.l    d0,bltdpt(a0)
  431.  
  432.     move.l    #$FFFFFFFF,bltafwm(a0)
  433.     move.w    #$0D00!(_AC+_Bc),bltcon0(a0)
  434.     move.w    #$2000,bltcon1(a0)
  435.     move.w    #$CCCC,bltcdat(a0)
  436.     move.w    #$0006,bltamod(a0)
  437.     move.w    #$0006,bltbmod(a0)
  438.     move.w    #$0000,bltdmod(a0)
  439.     move.w    #BitplaneSize/2,bltsizv(a0)
  440.     move.w    #$0001,bltsizh(a0)
  441.  
  442.     move.w    #-1,BlitterIsDone
  443.  
  444.     ClrINTQ    INTF_BLIT
  445.     SetINT    INTF_INTEN!INTF_BLIT
  446.  
  447.     addq.l    #1,TellFrames
  448.     rts
  449.  
  450. ;-------------------BLITTER DEL, 1 pass ----------------
  451. _AC = $A0
  452. _Bc = $44
  453.  
  454. SmallBlitterPass:
  455.     lea.l    $dff000,a0
  456.  
  457.     move.l    Buffer_1,d0
  458.     add.l    #ChunkyPixels-8,d0
  459.     move.l    d0,bltbpt(a0)
  460.  
  461.     move.l    Buffer_1,d0
  462.     add.l    #ChunkyPixels-8+2,d0
  463.     move.l    d0,bltapt(a0)
  464.  
  465.     move.l    Screen_0,d0
  466.     add.l    #BitplaneSize*3-2,d0
  467.     move.l    d0,bltdpt(a0)
  468.  
  469.     move.w    #$2D00!(_AC+_Bc),bltcon0(a0)
  470.     move.w    #$0002,bltcon1(a0)
  471.     move.w    #$cccc,bltcdat(a0)
  472.     move.w    #$0006,bltamod(a0)
  473.     move.w    #$0006,bltbmod(a0)
  474.     move.w    #$0000,bltdmod(a0)
  475.     move.w    #BitplaneSize/2,bltsizv(a0)
  476.     move.w    #$0001,bltsizh(a0)
  477.  
  478.     move.l    #.p32,BlittInter
  479.     movem.l    (sp)+,d0/a0
  480.     ClrINTQ    INTF_BLIT
  481.     rte
  482.  
  483. .p32:
  484.     lea.l    $dff000,a0
  485.  
  486.     move.l    Buffer_1,d0
  487.     add.l    #4,d0
  488.     move.l    d0,bltbpt(a0)
  489.  
  490.     move.l    Buffer_1,d0
  491.     add.l    #6,d0
  492.     move.l    d0,bltapt(a0)
  493.  
  494.     move.l    Screen_0,d0
  495.     add.l    #BitplaneSize*1,d0
  496.     move.l    d0,bltdpt(a0)
  497.  
  498.     move.w    #$0D00!(_AC+_Bc),bltcon0(a0)
  499.     move.w    #$2000,bltcon1(a0)
  500.     move.w    #$CCCC,bltcdat(a0)
  501.     move.w    #$0006,bltamod(a0)
  502.     move.w    #$0006,bltbmod(a0)
  503.     move.w    #$0000,bltdmod(a0)
  504.     move.w    #BitplaneSize/2,bltsizv(a0)
  505.     move.w    #$0001,bltsizh(a0)
  506.  
  507.     move.l    #.p33,BlittInter
  508.     movem.l    (sp)+,d0/a0
  509.     ClrINTQ    INTF_BLIT
  510.     rte
  511.  
  512. .p33:
  513.     lea.l    $dff000,a0
  514.  
  515.     move.l    Buffer_1,d0
  516.     add.l    #ChunkyPixels-4,d0
  517.     move.l    d0,bltbpt(a0)
  518.  
  519.     move.l    Buffer_1,d0
  520.     add.l    #ChunkyPixels-4+2,d0
  521.     move.l    d0,bltapt(a0)
  522.  
  523.     move.l    Screen_0,d0
  524.     add.l    #BitplaneSize*1-2,d0
  525.     move.l    d0,bltdpt(a0)
  526.  
  527.     move.w    #$2D00!(_AC+_Bc),bltcon0(a0)
  528.     move.w    #$0002,bltcon1(a0)
  529.     move.w    #$cccc,bltcdat(a0)
  530.     move.w    #$0006,bltamod(a0)
  531.     move.w    #$0006,bltbmod(a0)
  532.     move.w    #$0000,bltdmod(a0)
  533.     move.w    #BitplaneSize/2,bltsizv(a0)
  534.     move.w    #$0001,bltsizh(a0)
  535.  
  536.     move.l    #.done,BlittInter
  537.     movem.l    (sp)+,d0/a0
  538.     ClrINTQ    INTF_BLIT
  539.     rte
  540.  
  541. .done:
  542.     movem.l    (sp)+,d0/a0
  543.  
  544.     ClrINTQ    INTF_BLIT
  545.     ClrINT    INTF_BLIT
  546.  
  547.     clr.w    BlitterIsDone
  548.     rte
  549.  
  550. ;-----------------------------------------------
  551. NoInters:
  552.     movem.l    (sp)+,d0/a0
  553.     rte
  554.  
  555. Lev3InterruptHandler:
  556.     movem.l    d0/a0,-(sp)
  557.     lea.l    $dff000,a0
  558.     move.w    $1c(a0),d0
  559.     btst    #14,d0
  560.     beq.b    NoInters
  561.     and.w    $1e(a0),d0
  562.     btst    #6,d0
  563.     beq.b    VertBInter
  564.     movem.l    (sp)+,d0/a0
  565. ;BlittInter
  566.     movem.l    d0/a0,-(sp)
  567.     move.l    BlittInter(pc),a0
  568.     jmp    (a0)    
  569.  
  570. VertBInter:
  571.     btst    #5,d0
  572.     beq.b    NoInters
  573.     movem.l    (sp)+,d0/a0
  574.  
  575. ;--------
  576.     movem.l    d0-a6,-(sp)
  577.  
  578.     tst.w    SetScreen
  579.     beq.b    SkipSetScreen    
  580.  
  581.     bsr    UpdateCopperList
  582.  
  583.     clr.w    SetScreen
  584.  
  585. SkipSetScreen:
  586.     clr.w    VBL
  587.  
  588.     addq.l    #1,TellTicks
  589.  
  590.     movem.l    (sp)+,d0-a6
  591.  
  592.     ClrINTQ    INTF_VERTB
  593.     rte
  594.  
  595. BlittInter:        dc.l    BlitterPass
  596.  
  597. BlitterIsDone:        dc.w    0
  598. VBL:            dc.w    0
  599. SetScreen:        dc.w    0
  600.  
  601. OldLevel3Inter:        dc.l    0
  602.  
  603. TellFrames:        dc.l    0
  604. TellTicks:        dc.l    0
  605.  
  606. Buffer_0:        dc.l    Buffer0
  607. Buffer_1:        dc.l    Buffer1
  608.  
  609. Screen_0:        dc.l    Screen0
  610. Screen_1:        dc.l    Screen1
  611. Screen_2:        dc.l    Screen2
  612. Screen_3:        dc.l    Screen3
  613.  
  614. ;-----------------------------------------------------------------------------
  615.  
  616. SetupCopperList:
  617.     SetBitmap    SpriteData1,Spr1,5,4112
  618.     SetBitmap    SpriteData2,Spr2,5,4112
  619.  
  620.     move.l    #CopperList1,d0
  621.     move.w    d0,CopColNext+6
  622.     swap    d0
  623.     move.w    d0,CopColNext+2
  624.          
  625.     move.l    #CopperList1,d0
  626.     move.w    d0,NextCop2+6
  627.     swap    d0
  628.     move.w    d0,NextCop2+2
  629.  
  630.     move.l    #CopperList2,d0
  631.     move.w    d0,NextCop1+6
  632.     swap    d0
  633.     move.w    d0,NextCop1+2
  634.  
  635.     lea.l    SpriteData1,a1
  636.     move.l    #$AAAAAAAA,d0
  637.     move.l    #$55555555,d1
  638.     bsr    MakeDitherSprites
  639.  
  640.     lea.l    SpriteData2,a1
  641.     move.l    #$55555555,d0
  642.     move.l    #$AAAAAAAA,d1
  643.     bsr    MakeDitherSprites
  644.  
  645.     bsr    UpdateCopperList
  646.     SetCop    ColorCopperList
  647.     rts
  648.  
  649. UpdateCopperList:
  650.     move.l    Screen_2,a2
  651.     SetBitmap    (a2),Bitpls1,4,BitplaneSize,16
  652.     SetBitmap    (a2),Bitpls1+8,4,BitplaneSize,16
  653.     SetBitmap    (a2),Bitpls2,4,BitplaneSize,16
  654.     SetBitmap    (a2),Bitpls2+8,4,BitplaneSize,16
  655.     rts
  656. ;-------------------------------------------------
  657.  
  658. MakeDitherSprites:
  659.  
  660.     lea.l    SpritePos,a0
  661.  
  662.     moveq    #5-1,d3
  663.  
  664. .loop2:    move.l    (a0)+,(a1)+
  665.     move.l    (a0)+,(a1)+
  666.     move.l    (a0)+,(a1)+
  667.     move.l    (a0)+,(a1)+
  668.  
  669.     move.w    #128-1,d2
  670. .loop:
  671.     move.l    d0,(a1)+
  672.     move.l    d0,(a1)+
  673.     move.l    d0,(a1)+
  674.     move.l    d0,(a1)+
  675.  
  676.     move.l    d1,(a1)+
  677.     move.l    d1,(a1)+
  678.     move.l    d1,(a1)+
  679.     move.l    d1,(a1)+
  680.     dbra    d2,.loop
  681.  
  682.     dbra    d3,.loop2
  683.  
  684.     rts
  685.  
  686. SpritePos:
  687.     dc.w    $2940,$0000,$0000,$0000,$3002,$0000,$0000,$0000
  688.     dc.w    $2960,$0000,$0000,$0000,$3002,$0000,$0000,$0000
  689.     dc.w    $2980,$0000,$0000,$0000,$3002,$0000,$0000,$0000
  690.     dc.w    $29a0,$0000,$0000,$0000,$3002,$0000,$0000,$0000
  691.     dc.w    $29c0,$0000,$0000,$0000,$3002,$0000,$0000,$0000
  692.  
  693. ;------------------------------------------------------------------------
  694.  
  695.     Section    TheCopperList,data_c
  696.  
  697.  
  698. ColorCopperList:
  699.     incbin    "src3:tmap2/gfx/NewTexture03.col"
  700.  
  701.         dc.w  $0106,$E000        ;Set sprite colors to black.
  702.         dc.w  $01a6,$0000
  703.         dc.w  $01ae,$0000
  704.         dc.w  $01b6,$0000
  705.         dc.w  $0106,$0000
  706.  
  707. CopColNext:
  708.     dc.w    $0080,$0000,$0082,$0000
  709.     dc.w    $0088,$0000
  710.     dc.l    $ffff,$fffe
  711.     dc.l    $ffff,$fffe
  712.  
  713. CopperList1:
  714.  
  715. Spr1:    dc.w    $0120,$0000
  716.         dc.w    $0122,$0000
  717.         dc.w    $0124,$0000
  718.         dc.w    $0126,$0000
  719.         dc.w    $0128,$0000
  720.         dc.w    $012A,$0000
  721.         dc.w    $012C,$0000
  722.         dc.w    $012E,$0000
  723.         dc.w    $0130,$0000
  724.         dc.w    $0132,$0000
  725.         dc.w    $0134,$0000
  726.         dc.w    $0136,$0000
  727.         dc.w    $0138,$0000
  728.         dc.w    $013A,$0000
  729.         dc.w    $013C,$0000
  730.         dc.w    $013E,$0000
  731.  
  732.         dc.w    $01fc,$400f
  733.         dc.w    $0106,$0000
  734.     dc.w    $010c,$00ff
  735.  
  736.     dc.w    $0102,$0010
  737.  
  738.     dc.w    $0100,$0210
  739.  
  740.         dc.w    $0104,$003f
  741.         dc.w    $008e,$0081+(($29+(128-ScreenHeight))&$ff)<<8
  742.         dc.w    $0090,$00c1+(($29+(128-ScreenHeight)+ScreenHeight*2)&$ff)<<8
  743.         dc.w    $0092,$0038,$0094,$00b0
  744.         dc.w    $0108,-40
  745.         dc.w    $010a,0
  746.  
  747.     dc.w    $1011,$fffe
  748. Bitpls1:
  749.         dc.w    $00e0,$0000
  750.         dc.w    $00e2,$0000
  751.         dc.w    $00e4,$0000
  752.         dc.w    $00e6,$0000
  753.         dc.w    $00e8,$0000
  754.         dc.w    $00ea,$0000
  755.         dc.w    $00ec,$0000
  756.         dc.w    $00ee,$0000
  757.         dc.w    $00f0,$0000
  758.         dc.w    $00f2,$0000
  759.         dc.w    $00f4,$0000
  760.         dc.w    $00f6,$0000
  761.         dc.w    $00f8,$0000
  762.         dc.w    $00fa,$0000
  763.         dc.w    $00fc,$0000
  764.         dc.w    $00fe,$0000
  765.  
  766.  
  767. Tell    set    $28
  768.  
  769.     rept    108
  770.  
  771.     dc.b    Tell,$11,$ff,$fe
  772.     dc.w    $0102,$0021
  773.  
  774.     dc.b    Tell+1,$11,$ff,$fe
  775.     dc.w    $0102,$0010
  776.  
  777. Tell    set    Tell+2
  778.     endr
  779.  
  780.     dc.w    $ffdf,$fffe
  781.  
  782. Tell    set    $00
  783.  
  784.     rept    21
  785.  
  786.     dc.b    Tell,$11,$ff,$fe
  787.     dc.w    $0102,$0021
  788.  
  789.     dc.b    Tell+1,$11,$ff,$fe
  790.     dc.w    $0102,$0010
  791.  
  792. Tell    set    Tell+2
  793.     endr
  794.  
  795.  
  796. NextCop1:
  797.     dc.w    $0080,$0000,$0082,$0000
  798.     dc.w    $0088,$0000
  799.  
  800.         dc.w    $FFFF,$FFFE
  801.         dc.w    $FFFF,$FFFE
  802.  
  803. ;----------------------------------------------------------------
  804. CopperList2:
  805.  
  806. Spr2:    dc.w    $0120,$0000
  807.         dc.w    $0122,$0000
  808.         dc.w    $0124,$0000
  809.         dc.w    $0126,$0000
  810.         dc.w    $0128,$0000
  811.         dc.w    $012A,$0000
  812.         dc.w    $012C,$0000
  813.         dc.w    $012E,$0000
  814.         dc.w    $0130,$0000
  815.         dc.w    $0132,$0000
  816.         dc.w    $0134,$0000
  817.         dc.w    $0136,$0000
  818.         dc.w    $0138,$0000
  819.         dc.w    $013A,$0000
  820.         dc.w    $013C,$0000
  821.         dc.w    $013E,$0000
  822.  
  823.         dc.w    $01fc,$400f
  824.         dc.w    $0106,$0000
  825.     dc.w    $010c,$00ff
  826.  
  827.     dc.w    $0102,$0010
  828.  
  829.     dc.w    $0100,$0210
  830.  
  831.         dc.w    $0104,$003f
  832.         dc.w    $008e,$0081+(($29+(128-ScreenHeight))&$ff)<<8
  833.         dc.w    $0090,$00c1+(($29+(128-ScreenHeight)+ScreenHeight*2)&$ff)<<8
  834.         dc.w    $0092,$0038,$0094,$00b0
  835.         dc.w    $0108,-40
  836.         dc.w    $010a,0
  837.  
  838.     dc.w    $1011,$fffe
  839.  
  840. Bitpls2:
  841.         dc.w    $00e0,$0000
  842.         dc.w    $00e2,$0000
  843.         dc.w    $00e4,$0000
  844.         dc.w    $00e6,$0000
  845.         dc.w    $00e8,$0000
  846.         dc.w    $00ea,$0000
  847.         dc.w    $00ec,$0000
  848.         dc.w    $00ee,$0000
  849.         dc.w    $00f0,$0000
  850.         dc.w    $00f2,$0000
  851.         dc.w    $00f4,$0000
  852.         dc.w    $00f6,$0000
  853.         dc.w    $00f8,$0000
  854.         dc.w    $00fa,$0000
  855.         dc.w    $00fc,$0000
  856.         dc.w    $00fe,$0000
  857.  
  858. Tell    set    $28
  859.  
  860.     rept    108
  861.  
  862.     dc.b    Tell,$11,$ff,$fe
  863.     dc.w    $0102,$0010
  864.  
  865.     dc.b    Tell+1,$11,$ff,$fe
  866.     dc.w    $0102,$0021
  867.  
  868. Tell    set    Tell+2
  869.     endr
  870.  
  871.     dc.w    $ffdf,$fffe
  872.  
  873. Tell    set    $00
  874.  
  875.     rept    21
  876.  
  877.     dc.b    Tell,$11,$ff,$fe
  878.     dc.w    $0102,$0010
  879.  
  880.     dc.b    Tell+1,$11,$ff,$fe
  881.     dc.w    $0102,$0021
  882.  
  883. Tell    set    Tell+2
  884.     endr
  885.  
  886. NextCop2:
  887.     dc.w    $0080,$0000,$0082,$0000
  888.     dc.w    $0088,$0000
  889.  
  890.         dc.w    $FFFF,$FFFE
  891.         dc.w    $FFFF,$FFFE
  892.  
  893.  
  894. ;----------------------------------------------------------------
  895.     section    BitMaps,data_C
  896.  
  897. Buffer0:    ds.b    BitplaneSize*8
  898. Buffer1:    ds.b    BitplaneSize*8
  899.  
  900. Screen0:    ds.b    BitplaneSize*8
  901. Screen1:    ds.b    BitplaneSize*8
  902. Screen2:    ds.b    BitplaneSize*8
  903. Screen3:    ds.b    BitplaneSize*8
  904.  
  905. SpriteData1:    ds.l    (4*256+4)*5
  906. SpriteData2:    ds.l    (4*256+4)*5
  907.  
  908.